<?php

namespace Gds\VenteBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Gds\VenteBundle\Entity\Devis
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Gds\VenteBundle\Entity\DevisRepository")
 */
class Devis {

    /**
     * @ORM\ManyToOne(targetEntity="Gds\UserBundle\Entity\User", inversedBy="devis")
     * @ORM\JoinColumn(nullable=false)
     */
    private $user;

    /**
     * @ORM\OneToMany(targetEntity="Gds\VenteBundle\Entity\BonLivraisonClient", mappedBy="devis", cascade={"remove", "persist"})
     */
    private $bon_livraison; // Ici commentaires prend un "s", car un article a plusieurs commentaires !
    /**
     * @ORM\ManyToOne(targetEntity="Gds\VenteBundle\Entity\Client", inversedBy="devis")
     * @ORM\JoinColumn(nullable=false)
     */
    private $client;

    /**
     * @ORM\OneToMany(targetEntity="Gds\VenteBundle\Entity\LigneDevis", mappedBy="devis", cascade={"remove", "persist"})
     */
    private $lignesDevis; // Ici commentaires prend un "s", car un article a plusieurs commentaires !
    /**
     * @ORM\OneToMany(targetEntity="Gds\VenteBundle\Entity\BonCommandeClient", mappedBy="devis", cascade={"remove", "persist"})
     */
    private $bon_commandes; // Ici commentaires prend un "s", car un article a plusieurs commentaires !
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var \DateTime $date
     *
     * @ORM\Column(name="date", type="date")
     */
    private $date;

    /**
     * @var integer $heure
     *
     * @ORM\Column(name="heure", type="integer")
     */
    private $heure;

    /**
     * @var string $reference
     *
     * @ORM\Column(name="reference", type="string", length=255)
     */
    private $reference;

    /**
     * @var float $montant_ttc
     *
     * @ORM\Column(name="montant_ttc", type="decimal", scale=3)
     */
    private $montant_ttc;

    /**
     * @var boolean $is_supprimer
     *
     * @ORM\Column(name="is_supprimer", type="boolean")
     */
    private $is_supprimer;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId() {
        return $this->id;
    }

    /**
     * Set date
     *
     * @param \DateTime $date
     * @return Devis
     */
    public function setDate($date) {
        $this->date = $date;

        return $this;
    }

    /**
     * Get date
     *
     * @return \DateTime 
     */
    public function getDate() {
        return $this->date;
    }

    /**
     * Set reference
     *
     * @param string $reference
     * @return Devis
     */
    public function setReference($reference) {
        $this->reference = $reference;

        return $this;
    }

    /**
     * Get reference
     *
     * @return string 
     */
    public function getReference() {
        return $this->reference;
    }

    /**
     * Get lignesDevis
     *
     * @return Doctrine\Common\Collections\Collection 
     */
    public function getLignesDevis() {
        return $this->lignesDevis;
    }

    /**
     * Set client
     *
     * @param Gds\VenteBundle\Entity\Client $client
     * @return Devis
     */
    public function setClient(\Gds\VenteBundle\Entity\Client $client) {
        $this->client = $client;
        $client->addDevi($this);
        return $this;
    }

    /**
     * Get client
     *
     * @return Gds\VenteBundle\Entity\Client 
     */
    public function getClient() {
        return $this->client;
    }

    /**
     * Add lignesDevis
     *
     * @param \Gds\VenteBundle\Entity\LigneDevis $lignesDevis
     * @return Devis
     */
    public function addLignesDevi(\Gds\VenteBundle\Entity\LigneDevis $lignesDevis) {
        $this->lignesDevis[] = $lignesDevis;
        $prix = $lignesDevis->getPrixUnitaireHt() * (1 - $lignesDevis->getTauxRemise() / 100) * (1 + $lignesDevis->getTauxTva() / 100);
        $prix = round($prix,3);
        $this->setMontantTtc($this->getMontantTtc() + ($lignesDevis->getQuantite() * $prix));
        $lignesDevis->setDevis($this);
        return $this;
    }

    /**
     * Remove lignesDevis
     *
     * @param \Gds\VenteBundle\Entity\LigneDevis $lignesDevis
     */
    public function removeLignesDevi(\Gds\VenteBundle\Entity\LigneDevis $lignesDevis) {
        $this->lignesDevis->removeElement($lignesDevis);
    }

    /**
     * Set montant_ttc
     *
     * @param float $montantTtc
     * @return Devis
     */
    public function setMontantTtc($montantTtc) {
        $this->montant_ttc = $montantTtc;

        return $this;
    }

    /**
     * Get montant_ttc
     *
     * @return float 
     */
    public function getMontantTtc() {
        return $this->montant_ttc;
    }

    /**
     * Constructor
     */
    public function __construct() {
        $this->lignesDevis = new \Doctrine\Common\Collections\ArrayCollection();
        $this->is_supprimer = false;
    }

    public function __toString() {
        return $this->reference;
    }

    /**
     * Set heure
     *
     * @param integer $heure
     * @return Devis
     */
    public function setHeure($heure) {
        $this->heure = $heure;

        return $this;
    }

    /**
     * Get heure
     *
     * @return integer 
     */
    public function getHeure() {
        return $this->heure;
    }

    public function getTime() {
        $time = $this->getHeure();
        $sec = $time % 60;
        if ($sec < 10)
            $sec = '0' . $sec;
        $reste = (int) ($time / 60);
        $minute = $reste % 60;
        if ($minute < 10)
            $minute = '0' . $minute;
        $heure = (int) ($reste / 60);
        if ($heure < 10)
            $heure = '0' . $heure;
        $res = $heure . ':' . $minute . ':' . $sec;
        return $res;
    }

    /**
     * Set is_supprimer
     *
     * @param boolean $isSupprimer
     * @return Devis
     */
    public function setIsSupprimer($isSupprimer) {
        $this->is_supprimer = $isSupprimer;

        return $this;
    }

    /**
     * Get is_supprimer
     *
     * @return boolean 
     */
    public function getIsSupprimer() {
        return $this->is_supprimer;
    }

    /**
     * Add bon_commandes
     *
     * @param \Gds\VenteBundle\Entity\BonCommandeClient $bonCommandes
     * @return Devis
     */
    public function addBonCommande(\Gds\VenteBundle\Entity\BonCommandeClient $bonCommandes) {
        $this->bon_commandes[] = $bonCommandes;

        return $this;
    }

    /**
     * Remove bon_commandes
     *
     * @param \Gds\VenteBundle\Entity\BonCommandeClient $bonCommandes
     */
    public function removeBonCommande(\Gds\VenteBundle\Entity\BonCommandeClient $bonCommandes) {
        $this->bon_commandes->removeElement($bonCommandes);
    }

    /**
     * Get bon_commandes
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getBonCommandes() {
        return $this->bon_commandes;
    }

    /**
     * Add bon_livraison
     *
     * @param \Gds\VenteBundle\Entity\BonLivraisonClient $bonLivraison
     * @return Devis
     */
    public function addBonLivraison(\Gds\VenteBundle\Entity\BonLivraisonClient $bonLivraison) {
        $this->bon_livraison[] = $bonLivraison;

        return $this;
    }

    /**
     * Remove bon_livraison
     *
     * @param \Gds\VenteBundle\Entity\BonLivraisonClient $bonLivraison
     */
    public function removeBonLivraison(\Gds\VenteBundle\Entity\BonLivraisonClient $bonLivraison) {
        $this->bon_livraison->removeElement($bonLivraison);
    }

    /**
     * Get bon_livraison
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getBonLivraison() {
        return $this->bon_livraison;
    }


    /**
     * Set user
     *
     * @param \Gds\UserBundle\Entity\User $user
     * @return Devis
     */
    public function setUser(\Gds\UserBundle\Entity\User $user) {
        $this->user = $user;

        return $this;
    }

    /**
     * Get user
     *
     * @return \Gds\UserBundle\Entity\User 
     */
    public function getUser() {
        return $this->user;
    }

}
